package org.farec.tcc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.farec.tcc.modelo.Unidade;

public class UnidadeDAO {
	
	private Connection connection;
	
	public UnidadeDAO(Connection connection)
	{
		this.connection=connection;
	}
	
	public void adiciona(Unidade unidade)
	{
		String sql = "INSERT INTO unidade(nome, obs, idempresa) VALUES(?,?,?)";
		try
		{
			//Prepara o statement para insercao
			PreparedStatement stmt = connection.prepareStatement(sql);
			
			//seta os dados
			stmt.setString(1, unidade.getNome());
			stmt.setString(2, unidade.getObs());
			stmt.setInt(3, unidade.getCodEmpresa());			
			
			stmt.execute();
			stmt.close();
		}
		catch(SQLException e)
		{
			throw new RuntimeException(e);
		}
	}

	public List<Unidade> getLista()
	{
		List<Unidade> unidades = new ArrayList<Unidade>();
		
		return unidades;
	}
	
	public List<Unidade> getLista(int codEmpresa)
	{
		try
		{
			PreparedStatement stmt = this.connection.prepareStatement("SELECT * from unidade WHERE idempresa=? order by id");
			
			stmt.setInt(1, codEmpresa);
			
			ResultSet rs = stmt.executeQuery();
			List<Unidade> unidades = new ArrayList<Unidade>();
			
			while(rs.next())
			{
				//Criando um nova instancia
				Unidade unidade = new Unidade();
				unidade.setCodigo(rs.getInt("id"));
				unidade.setNome(rs.getString("nome"));
				unidade.setObs(rs.getString("obs"));
								
				//Adicionando objeto a lista
				unidades.add(unidade);
			}
			
			rs.close();
			stmt.close();
			return unidades;
		}
		catch(SQLException e)
		{
			throw new RuntimeException(e);
		}
	}
	
	public void altera(Unidade unidade)
	{
		String sql = "UPDATE unidade SET nome=?, obs=? WHERE id=? and idempresa=?";
		try
		{
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			stmt.setString(1, unidade.getNome());
			stmt.setString(2, unidade.getObs());
			stmt.setInt(3, unidade.getCodigo());
			stmt.setInt(4, unidade.getCodEmpresa());
			
			stmt.execute();
			stmt.close();
		}
		catch(SQLException e)
		{
			throw new RuntimeException(e);
		}
	}
	
	public void remove(Unidade unidade)
	{
		try
		{
			PreparedStatement stmt = this.connection.prepareStatement("DELETE from unidade where id=? and idempresa=?");
			stmt.setLong(1,unidade.getCodigo());
			stmt.setInt(1, unidade.getCodEmpresa());
			stmt.execute();
			stmt.close();
		}
		catch(SQLException e)
		{
			throw new RuntimeException(e);
		}
	}
	
	public Unidade buscaPorCodigo(int codEmpresa, int codigo)
	{
		try
		{
			PreparedStatement stmt = this.connection.prepareStatement("SELECT * from unidade where id=? and idempresa=?");
			
			stmt.setInt(1, codigo);
			stmt.setInt(2, codEmpresa);
			
			ResultSet rs = stmt.executeQuery();
			Unidade unidade = new Unidade();
			if(rs.next())
			{
				//Criando um nova instancia
				unidade.setCodigo(rs.getInt("id"));
				unidade.setNome(rs.getString("nome"));
				unidade.setObs(rs.getString("obs"));
			
			}
	
			rs.close();
			stmt.close();
			return unidade;
			
		}
		catch(SQLException e)
		{
			throw new RuntimeException(e);
		}
		
	}
	
	
	public Unidade getUnidade(Unidade unidade)
	{
		ResultSet rs;
		try
		{
			PreparedStatement stmt = this.connection.prepareStatement("select nome from unidade where nome ILIKE ? and idempresa=?");
			stmt.setString(1, unidade.getNome());
			stmt.setInt(2, unidade.getCodEmpresa());
			
			rs=stmt.executeQuery();
			
			if(rs.next())
			{
				unidade.setAlerta(true);
			}
			
			else
			{
				unidade.setAlerta(false);
			}
			stmt.close();
			rs.close();
		
		}
		
		catch(SQLException e)
		{
			throw new RuntimeException(e);
		}
		return unidade;
	}
	
	public Unidade getUnidadeUp(Unidade unidade)
	{
		ResultSet rs;
		try
		{
			PreparedStatement stmt = this.connection.prepareStatement("select nome from unidade where nome ILIKE ? and idempresa=? and id!=?");
			stmt.setString(1, unidade.getNome());
			stmt.setInt(2, unidade.getCodEmpresa());
			stmt.setInt(3, unidade.getCodigo());
			
			rs=stmt.executeQuery();
		
			if(rs.next())
			{
				unidade.setAlerta(true);
			}
			
			else
			{
				unidade.setAlerta(false);
			}
			stmt.close();
			rs.close();
		}
		
		catch(SQLException e)
		{
			throw new RuntimeException(e);
		}
		return unidade;
	}
	
}
